#include "SceneController.h"
#include <QGraphicsScene>
#include "views/BluePrintView.h"
#include "core/BaseNode.h"
#include "core/AddNode.h"
#include <QDebug>

SceneController::SceneController(QObject *parent)
    : QObject(parent)
    , m_scene(nullptr)
    , m_view(nullptr)
{
}

SceneController::~SceneController()
{
    // 场景会由其父对象自动管理，这里不需要手动删除
}

void SceneController::initializeScene(BluePrintView *view)
{
    if (!view) return;
    
    m_view = view;
    setupScene();
    
    // 连接视图的信号到控制器的槽
    connect(m_view, &BluePrintView::requestCreateNode, this, &SceneController::createNode);
    
    // 将场景设置给视图
    m_view->setScene(m_scene);
}

void SceneController::setupScene()
{
    // 创建场景 - Controller负责场景的创建和配置
    m_scene = new QGraphicsScene(this);
    
    // 设置场景范围 - 足够大以支持蓝图编辑
    m_scene->setSceneRect(-5000, -5000, 10000, 10000);
    
    // 后续可以在这里添加更多场景配置
    // 例如：背景设置、网格配置、默认节点等
}

BaseNode* SceneController::createNode(const QString& nodeType, const QPointF& position)
{
    if (!m_scene) {
        qDebug() << "场景未初始化";
        return nullptr;
    }
    
    BaseNode* node = nullptr;
    
    // 根据节点类型创建相应的节点
    if (nodeType == "AddNode") {
        node = new AddNode();
    }
    // 后续可以添加更多节点类型
    // else if (nodeType == "SubtractNode") {
    //     node = new SubtractNode();
    // }
    
    if (node) {
        // 设置节点位置
        node->setPos(position);
        
        // 添加到场景
        m_scene->addItem(node);
        
        // 注意：不再需要手动调用ensurePortsInScene()，因为itemChange会自动处理
        
        qDebug() << "成功创建" << nodeType << "节点在位置:" << position;
        return node;
    } else {
        qDebug() << "未知的节点类型:" << nodeType;
        return nullptr;
    }
}